iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 10
0

沒有比較就沒有傷害 (?!),在 Java 中處理空值 ( Null ) 一直以來是讓人覺得頭疼與懷疑人生。

讓 Kotlin 特別針對 Null 的處理特別關愛(?),首先讓我們先看看 Java 中 Null 是怎麼擾人的。


//Java Code
int strLength(String strInput) {
  return strInput.length();
}

public void main() {
  String strInput = "IronMan";
  /*
  *
  * 這裡有 1000 行 code
  *
  */
  strInput = null;
  /*
  *
  * 這裡有 1000 行 code
  *
  */
  int length = strLength(strInput);
}

這個範例中,IDE 會報錯並回一個 Runtime Exception ,或許我們現在看得很清楚哪裡出了錯,但在實務上必須從 2000~3000 行裡找出 strInput = null 這一行卻是有著相當的難度。

但 Java 也不是這樣放任 Null 在搗亂,也是有相對應的 annotation 來提醒開發者。

//Java Code
int strLength(@NotNull String strInput) {
  return strInput.length();
}

public void main() {
  String strInput = "IronMan";
  /*
  *
  * 這裡有 1000 行 code
  *
  */
  strInput = null;
  /*
  *
  * 這裡有 1000 行 code
  *
  */
  
  //在這一步,IDE會"提醒"開發者: strInput 現在為 Null喔
  int length = strLength(strInput);
}

然而這 annotation 也只是盡了 提醒 的責任,若沒注意到而編譯下去,仍然可以編譯、仍然可以爆炸(?


而 Kotlin 針對這一現況做了一些改變。

Kotlin 對 null 的預設:

Java 對 type 預設是可以接受為 null 的,但 kotlin 卻是預設皆不可為 null ,所以以上面的例子用 kotlin 來寫的話,就會變成這樣。

//Kotlin Code

fun strLength(strInput: String): Int {
  return strInput.length()
}

fun main() {
  var strInput = "IronMan"
  /*
  *
  * 這裡有 1000 行 code
  *
  */
  
  //在這一步, IDE 就會提醒 Error 並且無法編譯
  strInput = null
  /*
  *
  * 這裡有 1000 行 code
  *
  */
  val length = strLength("strInput")
}

剛剛有說 kotlin 預設是不為 null 的,所以在 strInput = null 時, IDE 就會提醒 Error 並且無法編譯。


剩下還有一部分是關於 object 的 null 處理,我們等明天再來討論!


上一篇
[Day 9] Kotlin 語法 - Interface
下一篇
[Day 11] Kotlin 語法 - Nullable? Kotlin V.S Java (2)
系列文
Android心得筆記×Kotlin語法初探 不是新手村 是嬰兒村30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言